1. 初始化客户端

146 字

🤖 Assistant

Chroma 是一款轻量级、开源的向量数据库,专为 AI 应用设计,尤其适合个人开发者和小规模项目。以下是 Chroma 的核心功能具体应用场景的详细分类说明:


一、基础功能

功能 说明
向量存储与检索 存储高维向量(如文本/图像嵌入),支持相似性搜索(余弦/L2距离)。
多模态支持 可存储文本、图像、音频的嵌入向量(需配合多模态模型如 CLIP)。
元数据过滤 在搜索时通过附加字段(如作者、日期)过滤结果。
持久化存储 支持将数据保存到本地磁盘(PersistentClient)。
LangChain 集成 直接兼容 LangChain 的 VectorStore 接口,简化 RAG 流程。

二、典型应用场景

1. 检索增强生成(RAG)

  • 用途:为大模型(如 GPT-4)提供外部知识库,提升回答准确性。
  • 示例步骤
    ```python
    from langchain.document_loaders import TextLoader
    from langchain.embeddings import OpenAIEmbeddings
    from langchain.vectorstores import Chroma

# 加载文档并分块
loader = TextLoader("article.txt")
documents = loader.load_and_split()

# 生成嵌入并存储到 Chroma
db = Chroma.from_documents(documents, OpenAIEmbeddings())

# 检索相似片段输入 LLM
query = "What is the main topic?"
docs = db.similarity_search(query)
print(docs[0].page_content)
```

2. 语义搜索

  • 用途:替代关键词搜索,实现“意图匹配”(如搜索类似“如何优化AI模型”的文档)。
  • 示例
    ```python
    # 使用 Sentence-BERT 生成嵌入
    from sentence_transformers import SentenceTransformer
    model = SentenceTransformer('all-MiniLM-L6-v2')

# 查询扩展
results = db.query(
query_texts=["AI model optimization techniques"],
n_results=3,
where={"category": "machine_learning"} # 元数据过滤
)
```

3. 推荐系统

  • 用途:基于用户历史行为或商品嵌入,推荐相似内容。
  • 示例
    python # 用户偏好向量 vs 商品向量库 user_preference = model.encode("user likes sci-fi movies") movies = db.query(query_embeddings=[user_preference], n_results=5)

4. 去重与聚类

  • 用途:快速识别重复或相似内容(如新闻去重、用户反馈归类)。
  • 示例
    python # 查找相似度超过阈值的文档 duplicates = db.query( query_embeddings=[existing_doc_embedding], where={"score": {"$gt": 0.95}} # 高相似度过滤 )

5. 多模态搜索

  • 用途:跨模态检索(如用文本搜图片,或反之)。
  • 示例
    ```python
    # 使用 CLIP 模型生成多模态嵌入
    image_embeddings = clip_model.encode_images([image1, image2])
    text_embeddings = clip_model.encode_text(["a sunny beach"])

# 混合检索
results = db.query(query_embeddings=text_embeddings, n_results=2)
```


三、高级功能

1. 混合搜索(向量 + 关键词)

  • 结合传统关键词搜索(BM25)和向量搜索,提升召回率。
  • 工具扩展:通过 langchain.retrievers 混合 Chroma 和 Elasticsearch。

2. 动态更新索引

  • 支持增量插入和删除数据,适合实时应用:
    ```python
    # 增量添加
    db.add_documents([new_doc])

# 删除数据
db.delete(ids=["obsolete_id"])
```

3. 分布式扩展(实验性)

  • 通过 Chroma HTTP Client 连接远程服务,实现多节点部署(需自行搭建)。

四、限制与注意事项

  1. 数据规模:适合中小规模数据(单机内存限制,通常 ≤1M 向量)。
  2. 生产环境:若需高可用性,建议改用 Milvus 或 Pinecone。
  3. 嵌入模型:Chroma 不生成嵌入,需自行调用模型(如 OpenAI、Sentence-BERT)。

五、快速原型开发模板

import chromadb
from chromadb.utils import embedding_functions

# 1. 初始化客户端
client = chromadb.PersistentClient(path="./chroma_db")

# 2. 创建集合(使用默认嵌入模型)
sbert_ef = embedding_functions.SentenceTransformerEmbeddingFunction(
    model_name="all-MiniLM-L6-v2"
)
collection = client.create_collection(
    name="my_collection",
    embedding_function=sbert_ef
)

# 3. 插入数据(自动生成嵌入)
collection.add(
    documents=["doc1 text", "doc2 text"],
    metadatas=[{"author": "Alice"}, {"author": "Bob"}],
    ids=["id1", "id2"]
)

# 4. 搜索(按语义 + 元数据)
results = collection.query(
    query_texts=["Find documents by Bob"],
    where={"author": "Bob"},  # 元数据过滤
    n_results=1
)
print(results["documents"])

总结

Chroma 最适合以下场景:
个人研究/实验
RAG 快速验证
小规模语义搜索(<1M 数据)
需要简单集成的 LangChain 项目

如需处理更大规模数据或生产级需求,可逐步迁移到 Milvus/Pinecone。